package demo.letcode.top100;

import java.util.Arrays;

/**
 * 给定一个包含红色、白色和蓝色，一共 n 个元素的数组，原地对它们进行排序，使得相同颜色的元素相邻，
 * 并按照红色、白色、蓝色顺序排列。
 * 此题中，我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
 *
 * 示例 1：
 * 输入：nums = [2,0,2,1,1,0]
 * 输出：[0,0,1,1,2,2]
 *
 * 示例 2：
 * 输入：nums = [2,0,1]
 * 输出：[0,1,2]
 *
 * 示例 3：
 * 输入：nums = [0]
 * 输出：[0]
 *
 * 示例 4：
 * 输入：nums = [1]
 * 输出：[1]
 *
 * @author taqo
 * @date 2021/5/22
 */
public class _75颜色分类 {
    public static void main(String[] args) {
        int a[] = {2,0,2,1,1,0};
        sortColor(a);
        System.out.println(Arrays.toString(a));
    }

    private static void sortColor(int[] a) {
        int ptr = 0;
        int len = a.length;
        for (int i = 0; i < len; i++) {
            if (a[i] == 0) {
                swap(a, ptr, i);
                ptr++;
            }
        }

        for (int i = ptr; i < len; i++) {
            if (a[i] == 1) {
                swap(a, ptr, i);
                ptr++;
            }
        }

    }

    private static void swap(int[] a, int ptr, int i) {
        int tmp = a[i];
        a[i] = a[ptr];
        a[ptr] = tmp;
    }
}
